迭代器类型

迭代器实际上是什么呢?任何特定的迭代器也都是某个类型的对象。当然,存在着许许多多不同的迭代器类型,因为每个迭代器都需要保存为在一个特定容器上完成自己的工作所需要的信息。这些迭代器的类型互相之间的差异可以像容器一样巨大,而且都是为某项特定工作专门度身打造的。例如,vector 的迭代器或许就是一种常规的指针,因为指针是引用 vector 中元素的一种很合理的方式:

换种方式,vector 的迭代器也可以被实现为一个到 vector 的指针,再加一个下标:

采用这种迭代器就能实现对区间范围的检查。

一个表迭代器必须是某种比指向元素的简单指针更复杂些的东西,因为一般来说,表中的一个元素根本不知道下一个元素在哪里。这样,表迭代器可以是一个指向链接的指针:

所有迭代器的共同之处在于它们的语义,以及它们的有关操作的名字。例如,对一个迭代器使用 ++ 操作总产生引用下一个元素的迭代器。与此类似,* 总产生被这个迭代器所引用的那个元素。事实上,任何对象只要能遵守这样为数不多的几条原则,它就是一个迭代器了(19.2.1节)。进一步说,用户极少需要知道一个特定迭代器的具体类型;每个容器都“知道”它的迭代器的类型,并采用约定好了名字 iteratorconst_iterator,使它们可以在其他地方使用。例如,list<Entry>::iterator 就是 list<Entry> 中普通迭代器的类型。我极少需要去关心这些类型是如何定义的。

🔚